init()

function init()
{


};

rpc.exports =
{
    callmethod: function (methods)
    {
        callMethods(methods)
    },
};

//function one()
//{
//    var className = "com.hx.hxsocket.MainActivity";
//    var instance = getInstance(className);
//    var classObj = instance.getClass();
//
//    var string = Java.use("java.lang.String");
//    var buffer = Java.array("java.lang.Class", [string.class]);
//
//    var method = classObj.getMethod("test",buffer);
//
//    var list = Java.array("java.lang.Object", ["fsdfsdfd"]);
//    method.invoke(instance,list);
//
//  var className = "com.hx.hxsocket.MainActivity";
//         var instance = getInstance(className);
//         var classObj = instance.getClass();
//
//         var string = Java.use("java.lang.String");
//
//         var argumentTypeArray = new Array(1);
//         argumentTypeArray[0] = string.class;
//
//         var argumentArrayObj = Java.array("java.lang.Class", argumentTypeArray);
//         var method = classObj.getMethod("test",argumentArrayObj);
//
//         var argumentValueArray = new Array(1);
//         argumentValueArray[0] = "123456";
//
//         var argumentArrayObj = Java.array("java.lang.Object", argumentValueArray);
//         method.invoke(instance, argumentArrayObj);
//}

function JSONArray(param)
{
    return Java.use("org.json.JSONArray").$new(param);
}

function JSONObject(param)
{
    return Java.use("org.json.JSONArray").$new(param);
}

function callMethods(className, permission, methodName, params)
{
    Java.perform(function ()
    {

        var instance = getInstance(className);
        if(null == instance)
            return;

        var classObj = instance.getClass();
        var types = new Array(params.length);
        var values = new Array(params.length);
        
        for (var i = 0; i < params.length; i++)
        {
            var json = JSONObject(params[i])
            var entry = json.entrySet()
            var key = entry.getKey();
            types[i] = Java.use(key).class;
            values[i] = typeCast(entry.getValue());
        }

        var typeArrayObj = Java.array("java.lang.Class", types);

        var method = null;
        if ("public" == permission)
        {
            method = classObj.getMethod(methodName, typeArrayObj);
        }
        else
        {
            method = classObj.getDeclaredMethod(methodName,typeArrayObj);
            method.setAccessible(true);
        }

        var valueArrayObj = Java.array("java.lang.Object", values);
        method.invoke(instance, valueArrayObj);

    });
}


function typeCast(type, value)
{
    
}

// 创建数量类型对象
function createArray(type, params)
{
    var array = null;
    Java.perform(function ()
    {
        var length = params.length;
        array = new Array(length);
        for(var i = 0; i < length; i++)
        {
            argumentTypeArray[i] = params[i];
        }

        array = Java.array(type, argumentTypeArray);
    });
    return array;
}

//类名称转类
function classNameToClass(className)
{
    return Java.use(className).class;
}

//内存中搜索类实例
function getInstance(className)
{
    var ret = null;
    Java.perform(function ()
    {
        Java.choose(className,
        {
            onMatch: function (instance)
            {
                ret = instance;
            },
            onComplete: function ()
            {

            }
        });
    });
    return ret;
}